// 文件操作

package utils

import (
	"os"
	"path/filepath"

	"github.com/beego/beego/v2/core/logs"
)

// CreateChildDir 调用os.MkdirAll递归创建文件夹
// 参考自：Go创建多级目录
// https://blog.csdn.net/finghting321/article/details/105439071
func CreateChildDir(filePath string) error {
	if IsExistPath(filePath) {
		return nil
	}

	err := os.MkdirAll(filePath, os.ModePerm)
	if err != nil {
		logs.Error("CreateChildDir.MkdirAll", err)
	}

	return err
}

// IsExistPath 判断文件或文件夹是否存在
func IsExistPath(path string) bool {
	_, err := os.Stat(path)
	if err != nil {
		return os.IsExist(err)
	}

	return true
}

var rootDir string // 主文件夹
// RemoveEmptyDir 删除一个文件夹里的所有空文件夹
// 来源：百度-文心一言4.5Turbo
func RemoveEmptyDir(dir string) error {
	if rootDir == "" {
		rootDir = dir
	}
	// 读取目录内容
	entries, err := os.ReadDir(dir)
	if err != nil {
		return err
	}

	// 递归处理子目录
	for _, entry := range entries {
		if !entry.IsDir() {
			continue
		}

		childDir := filepath.Join(dir, entry.Name())
		err = RemoveEmptyDir(childDir)
		if err != nil {
			return err
		}
	}

	// 再次检查目录是否为空
	entriesAfter, err := os.ReadDir(dir)
	if err != nil {
		return err
	}

	// 删除空目录
	if len(entriesAfter) == 0 && dir != rootDir {
		err = os.Remove(dir)
	}
	return err
}
